﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int global = 10;
int main()
{
	//printf("一\n");
	//printf("hehe\n");
	//printf("hehe\n");
	//
	//printf("------------------\n");
	//printf("二\n");
	//printf("%c\n", 'Q');
	//printf("%c\n", 81);//这⾥的81是字符Q的ASCII码值，也是可以正常打印的
	//
	//printf("------------------\n");
	//printf("三\n");
	/*
	对于字符串"abcdef"，我们实际上看到了6个字符：a,b,c,d,e,f，但是实际上在末尾还隐藏⼀个 \0 的
转义字符， \0 是字符串的结束标志。所以我们在使⽤库函数 printf() 打印字符串或者
strlen() 计算字符串⻓度的时候，遇到 \0 的时候就⾃动停⽌了。
	*/
	//char arr1[] = { 'a', 'b', 'c' };//arr1数组中存放3个字符
	//char arr2[] = "abc"; //arr2数组中存放字符串
	//printf("%s\n", arr1);
	//printf("%s\n", arr2);

	//printf("------------------\n");
	//printf("四\n");
	//char arr3[] = { 'a', 'b', 'c', '\0' };
	//char arr4[] = "abc";
	//printf("%s\n", arr3);
	//printf("%s\n", arr4);
	//printf("%s\n", "abc\0def");

	//printf("------------------\n");
	printf("五\n");
	//转义字符
	printf("abcndef\n");
	printf("abc\ndef\n");
	/*
• \?：在书写连续多个问号时使⽤，防⽌他们被解析成三字⺟词，在新的编译器上没法验证了。
• \'：⽤于表⽰字符常量'
• \"：⽤于表⽰⼀个字符串内部的双引号
• \\：⽤于表⽰⼀个反斜杠，防⽌它被解释为⼀个转义序列符。
• \a：警报，这会使得终端发出警报声或出现闪烁，或者两者同时发⽣。
• \b：退格键，光标回退⼀个字符，但不删除字符。
• \f：换⻚符，光标移到下⼀⻚。在现代系统上，这已经反映不出来了，⾏为改成类似于 \v 。
• \n：换⾏符。
• \r：回⻋符，光标移到同⼀⾏的开头。

• \t：制表符，光标移到下⼀个⽔平制表位，通常是下⼀个8的倍数。
• \v：垂直分隔符，光标移到下⼀个垂直制表位，通常是下⼀⾏的同⼀列。

	*/
	printf("%c\n", '\'');
	printf("%s\n", "\"");
	printf("c:\\test\\code\\test.c\n");
	printf("%d\n", strlen("c:\test\121\n"));//7
	printf("\a");
	printf("%c\n", '\130'); //130是8进制，转换成10进制是88，以88作为ASCII码值的字符是
	printf("%c\n", '\x30'); //x30中的30是16进制，转换成10进制是48，以48作为ASCII码值
	/*
	下⾯2种转义字符可以理解为：字符的8进制或者16进制表⽰形式
• \ddd ：d d d表⽰1~3个⼋进制的数字。 如： \130 表⽰字符X
• \xdd ：d d表⽰2个⼗六进制数字。 如： \x30 表⽰字符0
	*/
	
	printf("------------------\n");
	printf("六\n");
	int a = 0;
	printf("%zd\n", sizeof(a));
	printf("%zd\n", sizeof a);//a是变量的名字，可以省略掉sizeof后边的()
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(_Bool));
	printf("%zd\n", sizeof(long double));
	printf("%zd\n", sizeof(3 + 3.5));
	//测试：sizeof中表达式不计算
	short s = 2;
	int b = 10;
	printf("%zd\n", sizeof(s = b + 1));
	printf("s = %d\n", s);
	int local = 2018;//局部变量
	printf("%d\n", local);
	printf("%d\n", global);

	/*
	1、局部变量是放在内存的栈区
	2、全局变量是放在内存的静态区
	3、堆区是⽤来动态内存管理的
	*/
	
	return 0;

}